package algotithm.interview.shoppee.test1;

import java.io.*;

/**
 * @author zhouyanxiang
 * @Date 2021-03-2021/3/10-17:07


爬楼梯
详细描述
最近在玩一个游戏，这个游戏有n阶台阶，总共有n个台阶。每次只能向上走1个或者2个台阶。某些台阶是有传送门的（单向向上），可以选择进入传送门传送到指定的某个台阶，也可以不选择传送门继续前进，另外有一些台阶有地雷，所以我们避免踩入这个台阶，请问总共有多少种走法，因为数值可能很大，所以我们希望输出对20212021取模后的结果。






其他
时间限制: 1000ms

内存限制: 256.0MB

输入输出描述
输入描述
每个样例输入如下

第一行会输入3个值， n(1<=n<=10000)表示有n个台阶，d（1<=d<=1000）表示有d个地雷台阶，m(1<=m<=1000)表示有m个传送门

第二行会有d个数字（1<=f<=10000），f表示地雷的台阶号

接下来会有m行，每行2个数字(1<=x<y<=10000), 表示从台阶x有传送门可以传送到y台阶。

输出描述
输出到达第n个台阶共多少种走法，结果对20212021取模

输入输出示例
示例1
输入
复制
10 1 1
5
3 7
输出
复制
34
说明
共34种走法
示例2
输入
复制
10 1 1
7
6 6
输出
复制
52
说明
共52种走法

 */
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] arr1 = reader.readLine().split(" ");
        int n = Integer.parseInt(arr1[0]);
        int d = Integer.parseInt(arr1[1]);
        int m = Integer.parseInt(arr1[2]);
        int[] num = new int[d];
        String[] arr2 = reader.readLine().split(" ");
        for (int i = 0; i < d; i++) {
            num[i] = Integer.parseInt(arr2[i]);
        }
        int t = m;
        int ans = 0;
        int[] dp = new int[n+1];
        final int Mod = 20212021;
        while (t-- > 0) {
            String[] s = reader.readLine().split(" ");
            int x = Integer.parseInt(s[0]);
            int y = Integer.parseInt(s[1]);
            for (int i = 2; i <= n; i++) {
                dp[i] = dp[i-1] + dp[i-2];
            }
        }


        writer.write(ans % Mod + "\n");
        writer.flush();
        writer.close();
        reader.close();
    }

}
